package com.shujia.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo3Map {
  def main(args: Array[String]): Unit = {
    //创建spark配置文件对象  设置运行方式
    val conf = new SparkConf().setAppName("Demo3Map").setMaster("local")

    //创建spark上下文对象
    val sc = new SparkContext(conf)

    //读取文件
    val rdd1 = sc.textFile("spark/data/students.txt")

    /**
      * map算子   传入一行返回一行
      *
      */

    println("=" * 100)
    val rdd2 = rdd1.map(line => {
      val split = line.split(",")
      val id = split(0)
      val gender = split(3)

      println("map")

      id + "\t" + gender
    })
    println("=" * 100)

    /**
      * 转换算子：  会返回一个新的RDD  , 懒执行，不会立马执行，需要action算子触发执行
      * action算子  ：不会返回一个新的RDD ,  触发执行  触发整个代码执行  ， 每一个action算子都会触发一个job任务
      *
      * spark程序需要一个action算子触发任务执行
      *
      */
    rdd2.foreach(println)
    println("=" * 100)

    // 多个action算子会触发多个job  ,每一个任务都会将前面的流程重新执行一遍
    rdd2.foreach(println)


    //让代码不结束
    /*while (true) {

    }*/


    /**
      * mapValues   key不变 , 对value进行处理    传入一行返回一行
      *
      */
    val rdd3: RDD[(String, String)] = sc.parallelize(List(("001", "男"), ("002", "男"), ("003", "女"), ("005", "女")))

    val rdd4: RDD[(String, String)] = rdd3.mapValues(value => value + "1")

    rdd4.foreach(println)

  }

}
